package dao.xml.dom.groovy

import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import model.DrehPlan;
import model.Drehort
import model.Spezialisation;
import model.Teammitglied
import model.ZeitVonBis;

import org.xml.sax.SAXException;

import dao.xml.dom.DOMDrehPlanDAO
 

class GroovyDrehPlanDAO extends DOMDrehPlanDAO {
	
	public GroovyDrehPlanDAO () {
		
	}
	
	@Override
	public DrehPlan getDrehPlan(InputStream input) throws SAXException,
			IOException, ParseException {
		def xml = new XmlSlurper().parse(input)
		DrehPlan drehplan = new DrehPlan();
		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy")
		def getId = { x -> x.@id.toLong() }
		def toBool = { x -> x.toBoolean() }
		for (x in xml.drehorte.drehort){ 
			def genehmigung = x.@genehmigung.toBoolean()
			Drehort d = new Drehort(id: getId(x), drehortname: x.@name, genehmigung: toBool(x.@genehmigung), locationScout: x.@scout,
				beschreibung: x.@beschreibung,  moeglicheSzene: x.@moeglicheSzene, 
				strasse: x.@strasse, plz: x.@plz.toInteger(), ort: x.@ort)
			d.genehmigungsZeitspanne = new ZeitVonBis(sdf.parseObject(x.@von.toString()), sdf.parseObject(x.@bis.toString()))
			drehplan.drehorte.add(d)
		}
		for (x in xml.mitglieder.mitglied) {
			Teammitglied tm = new Teammitglied(id: getId(x), nachname: x.@nname, vorname: x.@vname, handynummer: x.@handynr,
				geburtstag: sdf.parseObject(x.@geburtstag.toString()), erlaubnis: toBool(x.@erlaubnis),
				eMailAdresse: x.@email  )
			tm.arbeitszeiten = new ArrayList()
			for (y in x.arbeitszeiten.arbeitszeit) {
				tm.addArbeitszeit(new ZeitVonBis(sdf.parse(y.@von.toString()),sdf.parse(y.@bis.toString())))
			}
			tm.rollen = new ArrayList()
			for (y in x.rollen.rolle) {
			
//				tm.addRolle(Spezialisation.find { 
//					for (s in Spezialisation.values()) 
//						if( s.tag.equals(y.@name) ) 
//							return s
//					})
				tm.addRolle(Spezialisation.values().find { it.tag.equals(y.@name)})
			}
			drehplan.mitarbeiter.add(tm)
		}
		return drehplan
	}

}
